# 函数的参数
# 位置参数
# x和n，这两个参数都是位置参数，调用函数时，传入的两个值按照位置顺序依次赋给参数x和n


def power(x, n):
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s


print(pow(5, 3))


# 默认参数

# 设置默认参数时，有几点要注意：
#
# 一是必选参数在前，默认参数在后，否则Python的解释器会报错（思考一下为什么默认参数不能放在必选参数前面）；
#
# 二是如何设置默认参数。
def person(name, sex, age=6, city='北京'):
    print('name:', name)
    print('sex:', sex)
    print('age:', age)
    print('city:', city)


person('张三', '男')
print('--------------------------------')
person('李四', '女', 17)
print('--------------------------------')
person('王五', '男', city='上海')    # 当不按顺序提供部分默认参数时，需要把参数名写上

# 默认参数有个最大的坑


def add_end(L=[]):
    L.append('END')
    return L


# 正常调用时，结果正常
print(add_end([1, 2, 3]))
print(add_end(['x', 'y']))
# 使用默认参数调用时，一开始结果也是对的,再次调用add_end()时，结果就不对了
print(add_end())
print(add_end())

# ###定义默认参数要牢记一点：默认参数必须指向不变对象！###
# 修改上面的例子，使用None


def add_end2(L=None):
    if L is None:
        L = []
    L.append("END")
    return L


print(add_end2())
print(add_end2())

